package top.csy8888.ch09.websocket;

import jakarta.servlet.http.HttpSession;
import jakarta.websocket.HandshakeResponse;
import jakarta.websocket.server.HandshakeRequest;
import jakarta.websocket.server.ServerEndpointConfig;
import jakarta.websocket.server.ServerEndpointConfig.Configurator;

/**
 * @author wangl
 * @date 2025/9/18
 * 握手处理器
 * 在握手时获取servlet环境下的对象信息
 * （如：HttpSession，HttpRequest等）
 * 并将这些数据保存到websocket的session对象中
 */
public class HandshakeHandler extends Configurator {

    /**
     * 重写握手方法
     * @param sec
     * @param request servlet中的请求对象
     * @param response servlet中的响应对象
     */
    @Override
    public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
        //获取HttpSession
        HttpSession httpSession = (HttpSession) request.getHttpSession();
        //从HttpSession中获取登录的用户信息
        String user = (String) httpSession.getAttribute("user");
        //将用户信息保存到WebSocket的session对象中，
        //每一个Websocket的session都维护了一个map集合，
        //getUserProperties()方法就是得到session的map
        sec.getUserProperties().put("user", user);
    }
}